import { defineConfig,loadEnv} from 'vite'
import {resolve}  from 'path'
import vue from '@vitejs/plugin-vue'
import path from 'path';
import { fileURLToPath } from 'url';

const __filename = fileURLToPath(import.meta.url);
// 由于package.json文件中的type为'module' node 默认的全局__dirname 找不到
const __dirname = path.dirname(__filename);

console.log("__dirname 路径是--------------" + __dirname);
console.log("__dirname 路径是--------------"+ resolve(__dirname, '.', './src'));
console.log("__dirname 路径是--------------" + __dirname);

// https://vite.dev/config/
export default defineConfig((mode)=>{
    console.log("mode" + JSON.stringify(mode))
    const env = loadEnv(mode.mode, process.cwd())
    console.log("现在运行的环境是" + mode.mode)
    // 判断是否开发环境
    const isDev = mode.mode === 'development'

    return {
        plugins: [
            vue(), // Vue 插件
        ],
        root: process.cwd(), // 项目根目录
        //路径别名配置
      resolve:{
          alias:{
              "/@":resolve(__dirname, '.', './src')
          }
      },
        base: mode.command === 'serve' ? './' : env.VITE_PUBLIC_PATH,
        optimizeDeps: {
            include: ['element-plus/es/locale/lang/zh-cn', 'element-plus/es/locale/lang/en'],
        },
        server: {
            host: '0.0.0.0', // 服务器地址
            port: env.VITE_PORT, // 服务器端口号
            open: env.VITE_OPEN === 'true', // 是否自动打开浏览器
            hmr: true, // 启用热更新
            proxy: {
                '/api/gen': {
                    //单体架构下特殊处理代码生成模块代理
                    target: env.VITE_IS_MICRO === 'true' ? env.VITE_ADMIN_PROXY_PATH : env.VITE_GEN_PROXY_PATH,
                    changeOrigin: true,
                    rewrite: (path) => path.replace(/^\/api/, ''),
                },
                '/api': {
                    target: env.VITE_ADMIN_PROXY_PATH, // 目标服务器地址
                    ws: true, // 是否启用 WebSocket
                    changeOrigin: true, // 是否修改请求头中的 Origin 字段
                    rewrite: (path) => path.replace(/^\/api/, ''),
                },
                '^/ws/info/.*': {
                    target: env.VITE_ADMIN_PROXY_PATH, // 目标服务器地址
                    ws: true, // 是否启用 WebSocket
                    changeOrigin: true,
                },
            },
        },
        build: {
            outDir: 'dist', // 打包输出目录
            chunkSizeWarningLimit: 1500, // 代码分包阈值
            // 开发使用 esbuild 更快，生产环境打包使用 terser 可以删除更多注释
            minify: isDev ?  'esbuild' : 'terser',
            terserOptions: {
                compress: {
                    drop_console: true, // 删除 console
                    drop_debugger: true, // 删除 debugger
                },
                format: {
                    comments: false // 删除所有注释
                }
            },
            rollupOptions: {
                output: {
                    entryFileNames: `assets/[name].[hash].js`,
                    chunkFileNames: `assets/[name].[hash].js`,
                    assetFileNames: `assets/[name].[hash].[ext]`,
                    compact: true,
                    manualChunks: {
                        vue: ['vue', 'vue-router', 'pinia'],
                        echarts: ['echarts'],
                    },
                },
            },
        },
    }
})